package com.cn.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.cn.dao.CartDao;
import com.cn.dao.OrderDao;
import com.cn.dao.ProductCategoryDao;
import com.cn.dao.UserDao;
import com.cn.dao.impl.CartDaoImpl;
import com.cn.dao.impl.OrderDaoImpl;
import com.cn.dao.impl.ProductCategoryDaoImpl;
import com.cn.dao.impl.UserDaoImpl;
import com.cn.domain.Cart;
import com.cn.domain.Order;
import com.cn.domain.Product;
import com.cn.domain.User;
import com.cn.service.CartService;

public class CartServiceImpl implements CartService{
	private CartDao cartDao=new CartDaoImpl();
	private ProductCategoryDao pcgd=new ProductCategoryDaoImpl();
	private UserDao userDao=new UserDaoImpl();
	private OrderDao orderDao=new OrderDaoImpl();
	//插入购物信息到购物车
	@Override
	public int addCart(Cart cart) {
		//存在该商品?
		Cart c=cartDao.queryCartById(cart.getPid(),cart.getUserid());
		
		if(cart!=null && (c!=null)) {
			//存在就取出数量+cart输入的新数量
			long newNum=c.getQuantity()+cart.getQuantity();
			//查询出最大库存量
			Product product=pcgd.queryProById(cart.getPid()+"");
			if(product.getHp_stock()<=newNum) 
			{	//如果超过了库存就直接给他赋值为最大的库存
				newNum=product.getHp_stock();
			}
			//直接更新这个数量字段就可以
			return cartDao.updateCartById(newNum,c.getPid(),c.getUserid());
		}else {
			//不存在就直接插入到数据库
			return cartDao.addCart(cart);
		}
	}

	//根据所有的购物表中的信息显示到购物车上
	@Override
	public List<Cart> queryAllCart(long userId){
		//在这里需要封装product的信息
		List<Cart> cartList=cartDao.queryAllCart(userId);
		List<Cart> newList=new ArrayList();
		Product pro=null;
		User user=null;
		List<Order> orderList=null;
		if(cartList!=null && cartList.size()>0) {
			for(Cart c:cartList) {
				pro=pcgd.queryProById(c.getPid()+"");
				//获取订单编号
				orderList=orderDao.queryAllOrder(userId);
				user=userDao.queryUserByKey("HU_USER_ID",c.getUserid()+"");
				Cart car=new Cart(c.getId(),c.getPid(),c.getQuantity(),c.getUserid(),pro,user);
				car.setOrderList(orderList);
				newList.add(car);
			}
		}
		//返回一个带有pro信息的list给页面
		return newList;
	}

	//根据商品ID更新商品数量 数量num
	@Override
	public int updateCartById(long num, long id,long userId) {
		//先查询一下该用户进行购买该商品是否存在
		return cartDao.updateCartById(num,id,userId);
	}

	//根据商品ID+userId进行查看购物车是否存在该物品
	@Override
	public Cart queryCartById(long id,long userId) {
		return cartDao.queryCartById(id,userId);
	}

	@Override
	public int delCartByPidAndUserId(long pid, long userId) {
		//删除购物车信息
		return cartDao.delCartByPidAndUserId(pid, userId);
	}
}
